/***********************************************************************************
 * 文件名： iac.h
 * 作者： 黄均铭
 * 版本： 1
 * 说明：
 *      智能雾化控制驱动程序。依据端口输入电压和占空比控制输出占空比，实现目标电压的输出。
 *      提供以下功能：
 *          启停；
 *          目标电压和超时设置；
 *          更多功能参考头文件中 API 说明。
 *      
 * 修改记录：
 * 	2021/03/16: 初版。 黄均铭。
***********************************************************************************/
#ifndef _IAC_H_
#define _IAC_H_

#include "iac_config.h"
#include "..\..\polsys.h"


// 类型定义

// 运行时实时参数集合
typedef struct _iac_run_param_t
{
    u16 TargetVoltage;  // 目标有效电压 mv
    u16 TargetTime;     // 超时时间 ms
    u32 HighTime; // 累计高电平
    u32 LowTime;   // 累计低电平
    u16 HighVoltage;  // 当前最大电压
    u8 NowDuty;       // 当前占空比
    u8 TargetDuty;   // 目标占空比
    bool Running; // 正在运行标记
} iac_run_param_t;

#define _IAC_RUN_PARAM_DEFAULT                  \
{                                               \
    _IAC_TARGET_VOLTAGE_DEFAULT,                \
    _IAC_TARGET_TIME_DEFAULT,                   \
    0,                                          \
    0,                                          \
    3000,                                       \
    100,                                        \
    100,                                        \
    false                                       \
}


// 提供的接口
// Iac_EvPortRising: 上升沿事件（外部调用）
// Iac_EvPortFalling: 下降沿事件（外部调用）
// Iac_EvAdcUpdate: ADC中断事件

// Iac_Init: 初始化。
// Iac_Start: 开始工作，启动输出。
// Iac_Stop: 停止输出。
// Iac_SetTargetVolatge: 设置目标电压。
// Iac_SetTimeout: 设置超时时间。
// Iac_IsRun: 是否正在运行。
// Iac_GetRunParam: 获取运行参数（返回结构体指针）。

void Iac_EvPortRising(void);
void Iac_EvPortFalling(void);
void Iac_EvAdcUpdate(void);
    
void Iac_Init(void);
void Iac_Start(void);
void Iac_Stop(void);
void Iac_SetTargetVolatge(u16 mv);
void Iac_SetTimeout(u16 ms);
bool Iac_IsRun(void);
iac_run_param_t *Iac_GetRunParam(void);

#endif
